#include <iostream>

/*
    可以接受可变参数的函数模板？
    可以接受可变参数的类模板？

*/

/*
    args : 模板参数包，包含 0~N 个模板参数
    无法直接获取参数包里的参数，需要一些技巧
*/
// template <class... Args>
// void ShowList(Args... args)
// {

// }

template <class T>
void ShowList(T val)
{
    std::cout << val << std::endl;
    // 这个函数输出之后就退出了，从而不再递归了。
}

template <class T, class... Args>
void ShowList(T val, Args... args)
{
    std::cout << val << " ";
    ShowList(args...); //当递归到参数包只剩下一个参数时，就会调用上面的ShowList（编译器会找最匹配的重载函数）
}

int main()
{
    ShowList(1);
    ShowList(1, 2);
    ShowList(1, 2, "abc");
    return 0;
}